#include <stdio.h>
#define N 10
struct stud
{  	int num; 
		char name[10];
    	double score;
 }; 
int readfile(char *fn,struct stud *s);
int writefile(char *fn,struct stud *s,int n);
void display(struct stud *s,int n);
int main1()
{   	struct stud s1[N],s2[N],s3[N];
		int i,j,n;
		double sum=0,aver;
		n=readfile("stud1.dat",s1);     //读取学生的信息存于是s1中，并获得学生人数存于n中
    	display(s1,n);                 //显示s1中的n个学生的信息
		for(i=0;i<n;i++)                //求所有学生的总分
			sum=sum+s1[i].score;
		aver=sum/n;
		printf("AVERAGE=%g\n",aver);
		j=0;                          //成绩大于等于平均分的学生人数
		for(i=0;i<n;i++)                //将成绩大于等于平均分的学生记录存放于s2
			if(s1[i].score>=aver)
			{	s2[j]=s1[i];
				j++;
			}
		if(writefile("stud2.dat", s2, j) == 0)  //将s2中的学生记录保存到文件中
			printf("File save success!\n");
		else
			printf("File save failed!\n");
		n=readfile("stud2.dat",s3);	   //读取学生信息到s3
		display(s3,n);
		return 0;
}
void display(struct stud *s,int n)      //显示s中的所有n个学生的记录信息
{	int i;
		printf(" Num       Name  Score\n");
		for(i=0;i<n;i++)
			printf("%4d %10s  %g\n", s[i].num, s[i].name, s[i].score);
}
int readfile(char *fn,struct stud *s) //打开指定文件，将文件中的学生信息读入到s中， 
{   	FILE *fp;                     //并返回实际读取的记录数
		int  i,count=0;
    	if((fp=fopen(fn,"rb"))==NULL)
        printf("file:%s-cannot open\n",fn);
    	fscanf(fp,"%d",&count);
		for(i=0;i<count;i++)
    	{   	fread(s,sizeof(struct stud),1,fp);
			s++;
    	}
    fclose(fp);
		return count;
}
int writefile(char *fn,struct stud *s,int n)//打开指定文件，将s中n个学生信息保存到文件fn中
{
		int i,result=0;
    	FILE *fp;
		if((fp=fopen(fn,"wb"))==NULL)
    	{	result=1;
			printf("%s-open file error!\n",fn); 
		}
    else
		{    fprintf(fp,"%d",n);
        for(i=0;i<n;i++)
            	if(fwrite(s + i, sizeof(struct stud), 1, fp) != 1)
	            {
                result=1;  
                printf("file write error\n");
                }
		}
fclose(fp);
		return result;
}